package appx.craft.droid.ui;

import java.io.IOException;

import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import appx.craft.droid.utils.Const;
import appx.craft.droid.utils.Utility;

public class AudioRecordActivity extends FragmentActivity {
	
	private static final String LOG_TAG = "AudioRecordTest";
	private static String mFileName = null;

	private RecordButton mRecordButton = null;
	private MediaRecorder mRecorder = null;

	private PlayButton mPlayButton = null;
	private MediaPlayer mPlayer = null;
	
	private SendAudio mSendButton = null;
	
	String str$Mode;
	
	private void onRecord(boolean start) {
		if (start) {
			startRecording();
		} else {
			stopRecording();
		}
	}

	private void onPlay(boolean start) {
		if (start) {
			startPlaying();
		} else {
			stopPlaying();
		}
	}

	private void startPlaying() {
		mPlayer = new MediaPlayer();
		try {
			
			mPlayer.setDataSource(mFileName);
			mPlayer.prepare();
			mPlayer.start();
			
		} catch (IOException e) {
			Log.e(LOG_TAG, "prepare() failed");
		}
	}

	private void stopPlaying() {
		mPlayer.release();
		mPlayer = null;
	}

	private void startRecording() {
		mRecorder = new MediaRecorder();
		mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
		mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
		mRecorder.setOutputFile(mFileName);
		mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

		try {
			mRecorder.prepare();
		} catch (IOException e) {
			Log.e(LOG_TAG, "prepare() failed");
		}

		mRecorder.start();
	}

	private void stopRecording() {
		mRecorder.stop();
		mRecorder.release();
		mRecorder = null;
	}

	class RecordButton extends Button {
		boolean mStartRecording = true;

		OnClickListener clicker = new OnClickListener() {
			public void onClick(View v) {
				onRecord(mStartRecording);
				if (mStartRecording) {
					setText("Stop recording");
				} else {
					setText("Start recording");
				}
				mStartRecording = !mStartRecording;
			}
		};

		public RecordButton(Context ctx) {
			super(ctx);
			setText("Start recording");
			setOnClickListener(clicker);
		}
	}
	
	class SendAudio extends Button {
		
		OnClickListener mClick = new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if(Utility.verifySerializableFile(mFileName)){
					Intent mIntentPath = new Intent();
					mIntentPath.putExtra("PATH",mFileName);
					setResult(RESULT_OK,mIntentPath);
					finish();	
				}else{
					
				}
			
				
			}
		};
		
		public SendAudio(Context mContext){
			super(mContext);
			setText("Send Audio Record");
			setOnClickListener(mClick);
		}
	}

	class PlayButton extends Button {
		boolean mStartPlaying = true;

		OnClickListener clicker = new OnClickListener() {
			public void onClick(View v) {
				onPlay(mStartPlaying);
				if (mStartPlaying) {
					setText("Stop playing");
				} else {
					setText("Start playing");
				}
				mStartPlaying = !mStartPlaying;
			}
		};

		public PlayButton(Context ctx) {
			super(ctx);
			setText("Start playing");
			setOnClickListener(clicker);
		}
	}

	public AudioRecordActivity() {
		
		
		mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
		mFileName += "/audiorecordtest.3gp";	
		
		
	}

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		
		/** 
		 * if true then play online if false then recording 
		 */
		str$Mode = getIntent().getExtras().getString(Const.INTENT_AUDIO);		
		
//		if(str$Mode.equalsIgnoreCase("true")){
//			
//			mFileName ="";
//			mFileName = Const.VERIFY_HOST + getIntent().getExtras().getString(Const.INTENT_FILE_AUDIO);
//
//		}else{
//			
//			mFileName = Const.DIR_DATA;
//			mFileName += "/audiorecordtest.3gp";	
//
//		}
		
		LinearLayout ll = new LinearLayout(this);
		ll.setOrientation(LinearLayout.VERTICAL);
		ll.setGravity(Gravity.CENTER);
		
		mRecordButton = new RecordButton(this);
		ll.addView(mRecordButton, new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT, 0));
		mPlayButton = new PlayButton(this);
		ll.addView(mPlayButton, new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT, 0));
		
		mSendButton = new SendAudio(this);
		ll.addView(mSendButton, new LinearLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT, 0));
		
		
		if(str$Mode.equalsIgnoreCase("true")){
			// hidding button 
			mRecordButton.setVisibility(View.INVISIBLE);
			mSendButton.setVisibility(View.INVISIBLE);
		}else{
			mRecordButton.setVisibility(View.VISIBLE);
			mSendButton.setVisibility(View.VISIBLE);
		}
	
		setContentView(ll);
	}

	@Override
	public void onPause() {
		super.onPause();
		if (mRecorder != null) {
			mRecorder.release();
			mRecorder = null;
		}

		if (mPlayer != null) {
			mPlayer.release();
			mPlayer = null;
		}
	}
}